Processing devices, such as microcontrollers, may have embedded processors, memories and special function analog and digital circuits. The processing devices may have multiple functional blocks. Typical analog circuits found in prior art microcontrollers include Continuous Time (CT) amplifiers having preset functions with given functional parameters. For instance, a CT analog amplifier might be configured as a fixed function circuit, such as a voltage amplifier, in which certain parameters, such as gain or bandwidth might be altered by programming.
Switched Capacitor (SC) analog circuits are also frequently incorporated into microcontroller designs. SC analog circuits in prior art are somewhat more versatile than CT analog circuits in that it might be possible to alter both the circuit function as well as the parameters of the circuit function by programming. However, both CT and SC analog circuits found in current microcontrollers generally require programming before utilization, and neither can be dynamically programmed (programmed “on-the-fly”).
In the conventional art, general purpose digital circuits are frequently included in a microcontroller implementation. Such digital circuits are pre-programmed to realize certain digital functions such as logical operations, arithmetical functions, counting, etc. These digital circuits are generally in the form of a Programmed Logic Array (PLA) or FPGA. Furthermore, such digital circuits that require pre-programming are generally not dynamically programmable (programmable “on-the-fly”). The main difficulty here is in the generality of such a digital circuit, which requires an excessive amount of digital logic, which in turn occupies a large area on a semiconductor chip as well as an increased cost of manufacturing.
Several other design considerations related to microcontroller utilization either go unaddressed, or require separate functionalities to enable them. For instance, existing designs do not offer a programmable analog circuit array with both CT analog circuits and SC analog circuits on the same semiconductor chip with a programmable array of digital circuits. As a result, realization of a function requiring complex communication between analog circuits and digital circuits often requires the use of multiple semiconductor chips. Further, existing microcontroller realizations generally require pre-programming and cannot be dynamically programmed.
In a programmable device, it is necessary to route signals in a user-configurable manner between arbitrary or nearly arbitrary sets of terminals. The device should contain a number of wires and switches that can be used to implement the aforementioned routes. This routing structure needs to be flexible because it is difficult to predict most situations in which the programmable device could be used. In general, a greater number of switches may produce a more flexible routing structure. However, it is also necessary to minimize the number of switches for two reasons. Firstly, a large number of switches may consume an excessive amount of silicon area. Secondly, each switch may degrade signal quality by a measurable amount. This includes both “used” switches, which are traversed to implement a route, and unused switches “hanging off” of a wire traversed in a route.